﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using Servico;

public partial class ConsultarPlaneamentoPessoal : System.Web.UI.Page
{
    Service1 servico = new Service1();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["Email"] != null)
        {
            string planXML = servico.consultarPlaneamentoPessoal(Session["Email"].ToString(), DateTime.Now);


            Literal lit = new Literal();

            lit.Text = "<p class=\"bottom\">" +
                        "<div style=\"position:relative\" class=\"gantt\" id=\"GanttChartDIV\"></div>" +
                        "<script language=\"javascript\">" +
                            "var g = new JSGantt.GanttChart('g', document.getElementById('GanttChartDIV'), 'hour');" +

                            "g.setShowRes(1);" +
                            "g.setShowDur(0);" +
                            "g.setShowComp(0);" +
                            "g.setCaptionType('Caption');" +

                            "g.setShowStartDate(0);" +
                            "g.setShowEndDate(0);" +
                            "g.setCaptionType('Resource');" + 
                            "g.setDateInputFormat('mm/dd/yyyy');" +
                            "g.setDateDisplayFormat('dd/mm/yyyy');" +
                            "g.setFormatArr(\"hour\");" +     //\"minute\",\"hour\",\"day\",\"week\

                            xmlGetItems(planXML) +

                            "g.Draw();" +
                            "g.DrawDependencies();" +
                        "</script>" +
                    "</p>";
                PanelGantt.Controls.Add(lit); 
        }
        else
        {
            Session["Erro"] = "Por favor autentique-se!";
            Response.Redirect("Home.aspx");
        }

        MensagemErro();
    }


    public string xmlGetItems(string planXML)
    {
        int pID = 1;
        int pos1, pos2, ajuda;
        string aux = planXML, compare, fim, nomeCliente, moradaCliente, cliente;
        bool encontrado = false;
        StringBuilder output = new StringBuilder();
        Dictionary<string, int> dictionaryPIDpedido = new Dictionary<string, int>();  //dicionário que terá os ids dos pedidos e os respectivos pID
        int paiID = 0, filhoID = 0;
        string descricaoPedido = "", descricaoTarefa = "", horaInicio = "", horaFim = "", nome = "";

        //Vai guardar o nome do técnico
        pos1 = aux.IndexOf("<Nome>");
        pos2 = aux.IndexOf("</Nome>");
        compare = aux.Substring(pos1 + 6, pos2 - (pos1 + 6));    //6 é o numero de caracteres de '<Nome>'
        nome = compare;    //guarda o nome do tecnico


        pos1 = aux.IndexOf("<idPedidoRecebido>");

        while (pos1 != -1)
        {
            aux = aux.Substring(pos1);
            pos2 = aux.IndexOf("</idPedidoRecebido>");
            compare = aux.Substring(18, pos2 - 18);   //18 é o numero de caracteres de '<idPedidoRecebido>'

            foreach (string id in dictionaryPIDpedido.Keys)
            {
                if (compare.Equals(id)) encontrado = true;
            }

            if (!encontrado)
            {
                dictionaryPIDpedido.Add(compare, pID);
                paiID = pID;
                pID++;
            }
            else
            {
                encontrado = false;
                aux = aux.Substring(pos2);
                pos1 = aux.IndexOf("<idPedidoRecebido>");
                continue;
            }

            aux = aux.Substring(pos2);
            pos1 = aux.IndexOf("<NomeCliente>");
            aux = aux.Substring(pos1);
            pos2 = aux.IndexOf("</NomeCliente>");

            compare = aux.Substring(13, pos2 - 13);
            nomeCliente = compare;

            aux = aux.Substring(pos2);
            pos1 = aux.IndexOf("<DesignacaoPedido>");
            aux = aux.Substring(pos1);
            pos2 = aux.IndexOf("</DesignacaoPedido>");

            compare = aux.Substring(18, pos2 - 18);
            descricaoPedido = compare;

            aux = aux.Substring(pos2);
            pos1 = aux.IndexOf("<Morada>");
            aux = aux.Substring(pos1);
            pos2 = aux.IndexOf("</Morada>");

            compare = aux.Substring(8, pos2 - 8);
            moradaCliente = compare;

            cliente = nomeCliente + "," + moradaCliente.Replace(", ", ",").Replace(" ", "_");

            output.Append("g.AddTaskItem(new JSGantt.TaskItem(" + paiID + ", '" + descricaoPedido + "', '', '', 'ff0000', '" + cliente + "', 0, '', 0, 1, 0,  1));");

            fim = aux;
            aux = planXML;

            pos1 = aux.IndexOf("<Tarefa id=");

            while (pos1 != -1)
            {
                pos1 = aux.IndexOf("<idPedidoRecebido>");
                aux = aux.Substring(pos1);
                pos2 = aux.IndexOf("</idPedidoRecebido>");
                compare = aux.Substring(18, pos2 - 18);   //18 é o numero de caracteres de '<idPedidoRecebido>'

                if (!dictionaryPIDpedido.ContainsKey(compare))
                {
                    aux = aux.Substring(pos2);
                    pos1 = aux.IndexOf("<Tarefa id=");
                    continue;
                }

                if (dictionaryPIDpedido[compare] != paiID)
                {
                    aux = aux.Substring(pos2);
                    pos1 = aux.IndexOf("<Tarefa id=");
                    continue;
                }

                filhoID = pID;
                pID++;

                aux = aux.Substring(pos2);
                pos1 = aux.IndexOf("<HoraInicialTarefa>");
                aux = aux.Substring(pos1);
                pos2 = aux.IndexOf("</HoraInicialTarefa>");

                compare = aux.Substring(19, pos2 - 19);
                horaInicio = compare.Replace("-", "/");
                ajuda = horaInicio.IndexOf(":00");
                horaInicio = formatHora(horaInicio.Remove(ajuda, 3));

                aux = aux.Substring(pos2);
                pos1 = aux.IndexOf("<HoraFimTarefa>");
                aux = aux.Substring(pos1);
                pos2 = aux.IndexOf("</HoraFimTarefa>");

                compare = aux.Substring(15, pos2 - 15);
                horaFim = compare.Replace("-", "/");
                ajuda = horaFim.IndexOf(":00");
                horaFim = formatHora(horaFim.Remove(ajuda, 3));

                aux = aux.Substring(pos2);
                pos1 = aux.IndexOf("<DesignacaoTarefa>");
                aux = aux.Substring(pos1);
                pos2 = aux.IndexOf("</DesignacaoTarefa>");

                compare = aux.Substring(18, pos2 - 18);
                descricaoTarefa = compare;

                output.Append("g.AddTaskItem(new JSGantt.TaskItem(" + filhoID + ", '" + descricaoTarefa + "', '" + horaInicio + "', '" + horaFim + "', 'ff0000', '" + cliente + "', 0, '" + nome + "', 100, 0, " + paiID + ", 1));");

                aux = aux.Substring(pos2);
                pos1 = aux.IndexOf("<Tarefa id=");
            }

            //aux = fim;
            aux = planXML;

            aux = aux.Substring(pos2);
            pos1 = aux.IndexOf("<idPedidoRecebido");
        }

        return output.ToString();
        /*"g.AddTaskItem(new JSGantt.TaskItem(1, \'Define Chart API\', \'2/10/2008 09:00\', \'2/10/2008 18:00\', \'ff0000\', \'http://help.com\', 0, \'Brian\', 0, 1, 0, 1));" +
        "g.AddTaskItem(new JSGantt.TaskItem(11, \'Verificar cobertura de linha\', \'2/10/2008 09:00\', \'2/10/2008 11:00\', \'ff00ff\', \'http://www.yahoo.com\', 1, \'Shlomy\', 0, 0, 1, 1, \"121,122\", \"Tarefa x\"));" +
        "g.AddTaskItem(new JSGantt.TaskItem(12, \'Verificar cobertura de linha\', \'2/10/2008 11:00\', \'2/10/2008 15:00\', \'ff00ff\', \'http://www.yahoo.com\', 1, \'Shlomy\', 100, 0, 0, 1, \"11\", \"Tarefa xxx\"));" +*/
    }

    public string formatHora(string hora)
    {
        string dia = hora.Substring(0, 2);
        string mes = hora.Substring(3, 2);
        string data = hora.Substring(5);

        return (mes + "/" + dia + data);

    }

    protected void MensagemErro()
    {
        if (Session["Erro"] != null)
        {
            Literal lit = new Literal();
            lit.Text = "<ul id=\"menu2\"><li>" + Session["Erro"].ToString() + "</li></ul>";
            PanelMsg.Controls.Add(lit);
            Session["Erro"] = null;
        }
        if (Session["Sucesso"] != null)
        {
            Literal lit = new Literal();
            lit.Text = "<ul id=\"menu3\"><li>" + Session["Sucesso"].ToString() + "</li></ul>";
            PanelMsg.Controls.Add(lit);
            Session["Sucesso"] = null;
        }
    }

}